const SQRT_2PI = Math.sqrt(2 * Math.PI);

function cumulativeDistribution(z) {
    let sum = z;
    let tmp = z;

    // 15次迭代足以达到4位数的精度
    for (let i = 1; i < 15; i++) {
        tmp *= (z * z) / (2 * i + 1);
        sum += tmp;
    }
    return (
        Math.round((0.5 + (sum / SQRT_2PI) * Math.exp((-z * z) / 2)) * 1e4) /
        1e4
    );
}

/**
 * 标准正态分布表，也称为单位正态表或Z表，
 * 是一个数学表，用于表示Φ（phi）的值，这些值是
 * [累积分布函数](https://en.wikipedia.org/wiki/Normal_distribution#Cumulative_distribution_function)
 * 的值。它用于查找统计量在标准正态分布下
 * 低于、高于或介于某些值之间的概率，并由此扩展到任何正态分布。
 */
const standardNormalTable = [];

for (let z = 0; z <= 3.09; z += 0.01) {
    standardNormalTable.push(cumulativeDistribution(z));
}

export default standardNormalTable;
